/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.yournamehere.client;

import com.google.gwt.core.client.GWT;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.view.client.ListDataProvider;
import java.util.List;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;

/**
 * Example class using the getDataSparql service.
 *
 * @author Cumar C.
 */
public class getDataSparqlUsageExample extends Composite {

    private Button btnSend = new Button("Consultar");
    private Label lblNameDoc = new Label();
    VerticalPanel panelResultados;
    HTML titleTable = new HTML("<div class=\"area\">Docentes Elegibles ::</div>");
    CellTable<Docentes> table = null;

    private void gui() {
        HorizontalPanel horizontalPanel = new HorizontalPanel();
        initWidget(horizontalPanel);

        panelResultados = new VerticalPanel();
        VerticalPanel verticalPanel = new VerticalPanel();
        horizontalPanel.add(verticalPanel);
        horizontalPanel.add(panelResultados);

        Image image = new Image("imagenes/docentes.jpg");
        verticalPanel.add(image);

        Image img = new Image("imagenes/loading.gif");
        panelResultados.add(img);

        panelResultados.setSpacing(20);
        panelResultados.setBorderWidth(0);
    }

    private static class Docentes {

        private final String nameDoc;
        private final String cedula;

        public Docentes(String name, String ced) {
            this.nameDoc = name;
            this.cedula = ced;
        }
    }

    public getDataSparqlUsageExample() {

        gui();

        final ListBox widget = new ListBox();
        final AsyncCallback<String> callbackAsig = new AsyncCallback<String>() {

            @Override
            public void onFailure(Throwable caught) {
                Window.alert("No se pudieron extraer Datos... ");
            }

            @Override
            public void onSuccess(String result) {
                String[] filas = result.split("#");
                for (int i = 0; i < filas.length; i++) {
                    widget.addItem(filas[i]);
                }

                //Colocación de Componentes
                panelResultados.clear();
                HTML title = new HTML("<div class=\"area\">Asignaturas</div>");
                panelResultados.add(title);
                panelResultados.add(widget);
                panelResultados.add(btnSend);
                panelResultados.add(lblNameDoc);
            }
        };

        getService().getNombreAsignaturas(callbackAsig);
        widget.setVisibleItemCount(3);
        widget.setWidth("250px");

        // Create an asynchronous callback to handle the result.
        final AsyncCallback<String> callback = new AsyncCallback<String>() {

            @Override
            public void onFailure(Throwable caught) {
                Window.alert("NO SE PUDO ESTABLECER CONEXIÓN CON EL SERVIDOR");
            }

            @Override
            public void onSuccess(String result) {
                if (table != null) {
                    panelResultados.remove(table);
                }

                table = new CellTable<Docentes>();

                String[] filas = result.split("#");

                // Create name column.
                TextColumn<Docentes> nameColumn = new TextColumn<Docentes>() {

                    @Override
                    public String getValue(Docentes docentes) {
                        return docentes.nameDoc;
                    }
                };

                // Create address column.
                TextColumn<Docentes> cedColumn = new TextColumn<Docentes>() {

                    @Override
                    public String getValue(Docentes Asignaturas) {
                        return Asignaturas.cedula;
                    }
                };

                // Add the columns.
                table.addColumn(nameColumn, "Nombre");
                table.addColumn(cedColumn, "Cedula");

                // Create a data provider.
                ListDataProvider<Docentes> dataProvider = new ListDataProvider<Docentes>();
                // Connect the table to the data provider.
                dataProvider.addDataDisplay(table);
                // Add the data to the data provider, which automatically pushes it to
                // the
                // widget.
                List<Docentes> list = dataProvider.getList();

                for (String fil : filas) {
                    String[] columnas = fil.split("@");
                    list.add(new Docentes(columnas[0], columnas[1]));
                }

                panelResultados.remove(titleTable);


                panelResultados.add(titleTable);
                panelResultados.add(table);
            }
        };

        // Listen for the button clicks
        btnSend.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                getService().getDocentesRecomendados(widget.getItemText(widget.getSelectedIndex()), callback);
            }
        });
    }

    public static getDataSparqlAsync getService() {
        return GWT.create(getDataSparql.class);
    }
}
